home *** CD-ROM | disk | FTP | other *** search
- /*
- * VirtuaLight's binary .VIB format API, sample 5
- * Written by Stephane Marty, 09/23/2001
- *
- * This sample program writes a binary VIB file
- * describing a 13-component blobby primitive.
- */
-
- #include "..\vlBinDef.h"
-
- static int F;
-
- static void
- SetSphericalField(viBLOBBY *b, viVECTOR *v, viDBL r, viDBL s)
- {
- b->components[F].type = FIELD_SPHERE;
- viCopyVector(&b->components[F].sc_cb_pn, v);
- viSetDbl(b->components[F].radius, r);
- viSetDbl(b->components[F].strength, s);
- F++;
- }
-
- static void
- SetCylindricalField(viBLOBBY *b, viVECTOR *vec1, viVECTOR *vec2, viDBL r, viDBL s)
- {
- b->components[F].type = FIELD_CYLINDER;
- viCopyVector(&b->components[F].sc_cb_pn, vec1);
- viCopyVector(&b->components[F].top, vec2);
- viSetDbl(b->components[F].radius, r);
- viSetDbl(b->components[F].strength, s);
- F++;
- }
-
- void main(void)
- {
- viBLOBBY *blb;
- viCAMERA *cam;
- viGENERAL *gen;
- viPOINT_LIGHT *pl;
- viFILE *vib;
- viVECTOR vecA, vecB;
- int k;
-
- // Open a new VIB file
- vib = viNewBinaryVIB("sample6.vib");
-
- // Add the camera (low adaptive antialiasing enabled)
- cam = viNewCamera();
- viSetInt(cam->Format.X, 256);
- viSetInt(cam->Format.Y, 256);
- viSetDbl(cam->FrameAspectRatio, 1.0);
- viSetVector(&cam->Location, 0, 10, -7);
- viSetVector(&cam->LookAt, 0, 0, -1);
- viSetVector(&cam->UpAxis, 0, 1, 0);
- viSetDbl(cam->FieldOfView, 45);
- viSetInt(cam->Antialiasing, 1);
- viDumpCamera(cam, vib);
-
- // Set the background color
- gen = viNewGeneral();
- viSetColor(&gen->Background, 0.098039*2, 0.098039*2, 0.392157*2);
- viDumpGeneral(gen, vib);
-
- // Add two pointlights
- pl = viNewPointLight();
- viSetColor(&pl->Intensity, 0.6, 0.6, 0.6);
- viSetVector(&pl->Position, 20, 30, -10);
- viDumpPointLight(pl, vib);
- viSetColor(&pl->Intensity, 0.6, 0.6, 0.6);
- viSetVector(&pl->Position, -15, 20, -20);
- viDumpPointLight(pl, vib);
-
- /*
- * create the blobby (13 components, threshold = 0.5)
- */
- blb = viNewBlobby((viDBL)0.5, 13);
- viSetByte(blb->solver, VIETA_SOLVER);
- // the 4 spherical fields...
- F = 0;
- SetSphericalField(blb, viSetVector(&vecA, -1, 0.5, -1), (viDBL)1.5, (viDBL)1.0);
- SetSphericalField(blb, viSetVector(&vecA, -1, 0.5, 1), (viDBL)1.5, (viDBL)1.0);
- SetSphericalField(blb, viSetVector(&vecA, 1, 0.5, 1), (viDBL)1.5, (viDBL)1.0);
- SetSphericalField(blb, viSetVector(&vecA, 1, 0.5, -1), (viDBL)1.5, (viDBL)1.0);
- // ...and the 9 cylindrical fields
- for (k=-3; k<=3; k++)
- SetCylindricalField(blb, viSetVector(&vecA, -4, 0, (viDBL)k), viSetVector(&vecB, 4, 0, (viDBL)k), (viDBL)0.75, (viDBL)1.0);
- SetCylindricalField(blb, viSetVector(&vecA, -3.5, 0, -4), viSetVector(&vecB, -3.5, 0, 4), (viDBL)1.0, (viDBL)1.0);
- SetCylindricalField(blb, viSetVector(&vecA, 3.5, 0, -4), viSetVector(&vecB, 3.5, 0, 4), (viDBL)1.0, (viDBL)1.0);
- // dump the blobby
- viPrimitive(vib);
- viDumpBlobby(blb, vib);
- viPrimitiveShaderName("blob", vib);
- viEndPrimitive(vib);
- viDeleteBlobby(blb);
-
- // Close the VIB file
- viCloseBinaryVIB(vib);
-
- // Deallocate memory used
- free(cam);
- free(gen);
- free(pl);
- }